package cn.pud.exceltool.Utils;

import org.apache.poi.ss.formula.functions.Columns;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;
/**
 * @Author: Miyako
 * @Date: 2024-11-13-17:15
 * @Description:
 *  格式说明:
 *      同行数据用“,”分隔 换行用",|,"分隔
 */
public class ExcelUtil {


    private String[] columns;

    private  Integer index = 0;


    /*
     * @param: [content] 传入一个字符串
     * @return: void
     * @description:字符串用","将各个元素分开后自动转为数组,简化输入
     **/
    private void getColumns(String content){
        //保证每次都从0开始读取
        index=0;
        columns= content.split(",");
    }

    /*
     * @param: [Columns] 列名
     * @description: 根据String数组一次内容横向录入一行数据
     **/
    public  void creatExcelColumn (String ExcelName,String content,Integer rowNumber){
        //将内容自动转为字符串数组
        getColumns(content);
        // 创建一个新的Excel工作簿
        Workbook workbook = new XSSFWorkbook();
        // 创建一个工作表
        Sheet sheet = workbook.createSheet("Sheet1");
        Row row = null;
        //最少也会创建一行避免错误
        if (rowNumber>0) {
            //从第一行开始循环
            for (int rowNo = 0 ;rowNo<rowNumber; rowNo++) {
                row = sheet.createRow(rowNo);
                insert(row);
            }
        }
        else {
            //只添加一行
            row = sheet.createRow(0);
            insert(row);
        }
        saveToExcel(ExcelName, workbook);

        System.out.println("Excel 文件已成功创建！");
    }


    /**
     * @description: 将编辑好的内容保存到本地
     * @author: Miyako
     * @param: ExcelName 文档名  workbook  Excel工作簿 默认sheet1]
     **/
    private  void saveToExcel(String ExcelName, Workbook workbook) {
        // 将工作簿写入输出文件
        try (FileOutputStream fileOut = new FileOutputStream("D:\\Excel\\"+ ExcelName +".xlsx")) {
            workbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //将数组的元素存入相应字段
    private void insert(Row row){
        for (int i = 0 ; index < columns.length; index++ , i++) {
            // 在第 i 列创建单元格，并设置单元格的值为数组的第 i 个元素
            Cell cell = row.createCell(i);
            //分隔符代表换行,index是数组索引
            if (!columns[index].equals("|")){
            cell.setCellValue(columns[index]);
            } else {
                index++;
                break;
            }
        }
    }

    public void creatExcelColumnByOneRow(String ExcelName,String content){
        creatExcelColumn(ExcelName, content,1);
    }

}
